// PROGRAMA : IDCSUP91
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTES : GEJUSPC - SEC. DA JUSTICA, SEG. PUBLICA E CIDADANIA
// VIVA CIDADAO
// OBJETIVO : GRAVA CONTROLES E ATUALIZA ARQUIVOS DE EMISSAO DO RG
// RG E PARA A ABN(AMERICAN BANK NOTE)
// ATUALIZACOES DATA
// PROGRAMA : IDCSUP01 16/04/2002
// PROGRAMADOR :
// OBJETIVO : AJUSTES PARA IMPRESSAO VIA ABN
// EM 27/11/2002 POR SOLON
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.DidEmissao;
import br.com.vti.sisp_sicrim.antigo.model.Estla001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicRg;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcsup91 OBJETIVO : GRAVA CONTROLES E ATUALIZA ARQUIVOS DE EMISSAO DO RG RG E PARA A ABN(AMERICAN BANK NOTE) *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcsup91")
public class Idcsup91 {
	// Views utilizadas
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	DidEmissao vwEmissao = new DidEmissao();
	SicRg vwsicrg = new SicRg();
	DidCadastro didcad = new DidCadastro();
	// Telas/relatorios utilizados
	// Includes utilizados
	Estla001 estla001 = new Estla001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idcsup91 idcsup91Anterior;
	String faseproc = "0";

	// Par�metros
	private long rgemite = 0;
	private long docemite = 0;
	private int viaemite = 0;
	private int matr = 0;
	private int vr = 0;
	private String renaid = "";
	private String ctl = "";
	private int j = 0;
	private String conf = "";
	private int datemi = 0;
	private String chassi = "";
	private String nommae = "";
	private String nompai = "";
	private String comuna = "";
	private int data8 = 0;
	private String numpos = "";
	private String numvia = "";
	private String pis = "";
	private long pispas = 0;
	private String numcpf = "";
	private String docum1 = "";
	private String docum2 = "";
	private int datn = 0;
	private long regger = 0;
	private int datnas = 0;
	private long ndemid = 0;
	private String comun = "";
	private int nvia = 0;
	private String ufnasc = "";
	private String vvv = "";
	private int v1 = 0;
	private String ppp = "";
	private String docume = "";
	private String nomide = "";
	private String nomid1 = "";
	private String nomid2 = "";
	private String filia1 = "";
	private String filia2 = "";
	private String nomeClasse = this.getClass().getSimpleName();
	private String impressora = "";
	private String jUsuario = UtilBean.getInitUser();
	private long numrg = 0;
	private long nserie = 0;
	private String nomeid = "";
	private int horatemp = 0;

	public Idcsup91(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Long rgemite, Long Docemite, Integer viaemite, Integer matr, Integer vr, String renaid) {
		try {
			main(rgemite, docemite, viaemite, matr, vr, renaid);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(long prgemite, long pdocemite, int pviaemite, int pmatr, int pvr, String prenaid) throws Exception {
		rgemite = prgemite;
		docemite = pdocemite;
		viaemite = pviaemite;
		matr = pmatr;
		vr = pvr;
		renaid = prenaid;

		sessao.getSisgsisp().setOperacao("ECI");
		nomeClasse = "SUBPRINT";
		regger = rgemite;
		ndemid = docemite;
		nvia = viaemite;
		sessao.getSisgsisp().setMatric(matr);
		sessao.getSisgsisp().setVar(vr);
		estla001.cpo = 5;
		estla001.esttip = 99;
		conf = "S";
		data8 = UtilBean.obtemDataCorrente();
		nomid1 = "";
		nomid2 = "";
		nommae = "";
		nompai = "";
		filia1 = "";
		filia2 = "";
		ctl = "";
		comun = "";
		datnas = 0;
		docum1 = "";
		numvia = "";
		numpos = "";
		estla001.qde = 0;
		datn = 0;
		docum2 = "";

		ctl = "S";

		nserie = ndemid;
		chassi = "";
		mostra();
		funcoes.estna001(estla001.cpo, estla001.esttip, estla001.qde, sessao.getSisgsisp().getVar(), sessao.getSisgsisp().getMatric());
		////dao.rollback();
		// exit();
	}

	private void mostra() throws Exception {
		vwDidcad.consultaNumeroRg(regger);
		nomide = didcad.getNomeIdent();
		nompai = didcad.getNomePai();
		nommae = didcad.getNomeMae();
		numrg = regger;
		nserie = didcad.getNumeroSerieCart();
		nomeid = didcad.getNomeIdent();
		ppp = UtilBean.moveSubstring(ppp, 0, 3, "N", didcad.getNumeroPosto());
		vvv = UtilBean.moveSubstring(vvv, 0, 2, "N", nvia);
		datn = didcad.getDataDocumento();
		datn = (int) funcoes.sissd002(datn);
		numvia = UtilBean.concatena("VIA-", vvv);
		numpos = UtilBean.concatena("P-", ppp);
		if (nommae.trim().equals("")) {

			nommae = "************";
		}
		if (nompai.trim().equals("")) {

			nompai = "************";
		}
		if (vwDidcad.getNacionalidadeIdent() == 1) {
			// UtilBean.subStr(tablele.pesq,0, 3) = 1;
			// UtilBean.subStr(tablele.pesq,3, 12) =
			// didcad.getNomeMunicipioIdent();
			// */
			// TABELA DE MUNICIPIOS
			// NOME DO MUNICIPIO
			tablele.resp = funcoes.sisst001(1, didcad.getNomeMunicipioIdent(), tablele.resp);
			comuna = tablele.resp;
			if (UtilBean.subStr(tablele.resp, 0, 1).equals("#")) {
				// TABELA DE PAISES
				// PAIS DE ORIGEM
				tablele.resp = funcoes.sisst001(209, didcad.getPaisOrigem(), tablele.resp);
				comuna = tablele.resp;
			}

			comun = comuna;
			comun = UtilBean.concatena(comuna, "-", didcad.getUfMunicipioNasc());
		} else {
			tablele.resp = funcoes.sisst001(209, didcad.getPaisOrigem(), tablele.resp);
			comuna = tablele.resp;

			comun = comuna;
		}
		switch (vwDidcad.getTipoDocumento()) {
		case 1: {
			if (vwDidcad.getEstadoCivil() == 7) {
				docume = UtilBean.concatena("CONCUBI.-N:", didcad.getNumeroCertidao(), " FLS.", didcad.getNumeroFolha(), " LIV.", didcad.getNumeroLivro());
			} else {
				docume = UtilBean.concatena("NASC.-N:", didcad.getNumeroCertidao(), " FLS.", didcad.getNumeroFolha(), " LIV.", didcad.getNumeroLivro());
			}
			break;
		}
		case 2: {
			if (vwDidcad.getEstadoCivil() == 4) {
				docume = UtilBean.concatena("VIUVO-N:", didcad.getNumeroCertidao(), " FLS.", didcad.getNumeroFolha(), " LIV.", didcad.getNumeroLivro());
			} else {
				docume = UtilBean.concatena("CASAM.-N:", didcad.getNumeroCertidao(), " FLS.", didcad.getNumeroFolha(), " LIV.", didcad.getNumeroLivro());
			}
			break;
		}
		case 3: {
			docume = UtilBean.concatena("PORT.MINISTERIAL-N:", didcad.getNumeroPortariaMinist(), "/", didcad.getAnoPortariaMinist());
			tablele.resp = funcoes.sisst001(209, didcad.getPaisOrigem(), tablele.resp);
			// PESQUISA TABELA

			comuna = tablele.resp;
			break;
		}
		case 4: {

			docume = UtilBean.moveSubstring(docume, 0, 35, "A", "NAC. PORTUGUESA-PORT. MINISTERIAL");
			docume = UtilBean.moveSubstring(docume, 35, 20, "A", UtilBean.concatena("N:", didcad.getNumeroPortariaMinist(), "/", didcad.getAnoPortariaMinist()));
			tablele.resp = funcoes.sisst001(209, didcad.getPaisOrigem(), tablele.resp);
			// PESQUISA TABELA

			comuna = tablele.resp;
			break;
		}
		case 5: {
			if (vwDidcad.getEstadoCivil() == 5) {
				docume = UtilBean.concatena("SEP.JUD.-N:", didcad.getNumeroCertidao(), " FLS.", didcad.getNumeroFolha(), " LIV.", didcad.getNumeroLivro());
			}
			break;
		}
		case 6: {
			if (vwDidcad.getEstadoCivil() == 3) {
				docume = UtilBean.concatena("SEP.DIV.-N:", didcad.getNumeroCertidao(), " FLS.", didcad.getNumeroFolha(), " LIV.", didcad.getNumeroLivro());
			}
			break;
		}
		case 7: {
			if (vwDidcad.getEstadoCivil() == 6) {
				docume = UtilBean.concatena("SEP.DES.-N:", didcad.getNumeroCertidao(), " FLS.", didcad.getNumeroFolha(), " LIV.", didcad.getNumeroLivro());
			}
			break;
		}
		default: {
			break;
		}
		}

		docum1 = UtilBean.subStr(docume, 0, 35);

		docum2 = UtilBean.subStr(docume, 35, 20);
		docume = "";
		for (j = 1; j <= 37; j++) {
			if (UtilBean.subStr(nomide, j, 1).trim().equals("")) {
				if (UtilBean.subStr(nomide, j + 1, 1).trim().equals("")) {
					break;
				}
			}
		}
		filia1 = String.format("%35s%35s%35s", nompai, "E", nommae);
		if (j < 36) {

			nomid1 = UtilBean.moveSubstring(nomid1, 35, 35, "A", nomide);
		} else {

			nomid1 = nomide;
		}
		nomide = "";
		nompai = "";
		nommae = "";
		datnas = didcad.getDataNasc();
		datnas = (int) funcoes.sissd002(datnas);
		if (vwDidcad.getRegistroAnterior() > 0 && vwDidcad.getUfRegAnterior() == sessao.getSisgsisp().getUfloca()) {
			pis = "RG. ANT.";
			pispas = didcad.getRegistroAnterior();
		} else {
			if (vwDidcad.getNumeroPisPasep() > 0) {

				pispas = didcad.getNumeroPisPasep();
				pis = "PIS/PASEP";
			} else {
				pispas = 0;
				pis = "";
			}
		}
		if (vwDidcad.getNumeroCpf() > 0) {
			numcpf = UtilBean.moveSubstring("", 0, 11, "N", vwDidcad.getNumeroCpf());
		} else {
			numcpf = StringUtils.repeat("*", 11);
		}
		if (numcpf.equals("0")) {
			numcpf = StringUtils.repeat("*", 11);
		}

		vwDidcad.setNumeroVia(Integer.parseInt(UtilBean.subStr(vvv, 0, 2)));
		chassi = UtilBean.moveSubstring("", 0, 13, "N", regger);
		vwDidcad.atualiza();
		//dao.commit();
		vwDvecon.setNumeroChassi(chassi);
		vwDvecon.setNumeroDocumento(ndemid);
		vwDvecon.setDataEmissao(data8);
		// NUMERO DOCUMEN

		vwDvecon.setTipoDocumento(88);
		vwDvecon.setMatriculaFunc(sessao.getSisgsisp().getMatric());
		vwDvecon.setCodigoMunicipio(Integer.parseInt(UtilBean.subStr(ppp, 0, 3)));
		vwDvecon.setCodigoRecuperacao(v1);
		// NUMERO POSTO

		vwDvecon.setRenaid(renaid);
		// NUMERO DA VIA
		// PAGAMENTO ABN
		vwDvecon.grava();
		//dao.commit();
		estla001.qde = 1;
		imprime();
		vwEmissao.setRegGeralEmitido(numrg);
		vwEmissao.setNomeIdent(nomeid);
		vwEmissao.setNumeroSerieRg(nserie);
		vwEmissao.setDataEmissao(UtilBean.obtemDataCorrente());
		horatemp = Integer.parseInt((new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime())));
		vwEmissao.setHoraEmissaoCarteira(horatemp);
		vwEmissao.setMatriculaFunc(sessao.getSisgsisp().getMatric());
		vwEmissao.grava();
		//dao.commit();

		gravaSicRg();
	}

	private void gravaSicRg() {
		vwsicrg.consultaNumeroRg(rgemite);

		vwsicrg.setNumeroRg(rgemite);
		vwsicrg.setDataNasc(UtilBean.obtemDataCorrente());
		vwsicrg.setDataAtu(Integer.parseInt((new SimpleDateFormat("HHmmssS").format(Calendar.getInstance().getTime()))));
		// abnFlag = "";
		vwsicrg.atualiza();
		//dao.commit();
		//dao.rollback();

		if (vwsicrg.registrosProcessados() == 0) {

			vwsicrg.setNumeroRg(rgemite);
			vwsicrg.setDataNasc(UtilBean.obtemDataCorrente());
			vwsicrg.setDataAtu(Integer.parseInt((new SimpleDateFormat("HHmmssS").format(Calendar.getInstance().getTime()))));
			// abnFlag = "";
			vwsicrg.grava();
			//dao.commit();
		}
	}

	private void imprime() {
		sessao.getSisgsisp().setMens("EMISSAO EFETUADA OK");
		UtilBean.mensagemTexto();
		regger = 0;
		datn = 0;
		nomid1 = "";
		nomid2 = "";
		filia1 = "";
		filia2 = "";
		comun = "";
		datnas = 0;
		docum1 = "";
		docum2 = "";
		pis = "";
		numcpf = "";
		pispas = 0;
		numpos = "";
		numvia = "";
	}

	private void rotDatemi() {

		chassi = String.valueOf(regger);
		while (vwDvecon.pesquisaNumeroChassi(chassi)) {

			datemi = vwDvecon.getDataEmissao();

		}

		// SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:" *ERROR-NR
		// "    LINHA:" *ERROR-LINE " PROGRAMA:" nomeClasse "!");
	}
}
